import fs from 'node:fs';
import path from 'node:path';
import { fileURLToPath } from 'node:url';

// 源文件目录（包含E开头的视频文件）
const SOURCE_DIR = String.raw`\\10.1.1.5\video\_待处理\ffff`;
// 目标父目录（主目录将被创建在这里）
const TARGET_PARENT_DIR = String.raw`\\10.1.1.5\video\_待处理`;

// 解析命令行参数
const [subDirName, seasonArrayArg] = process.argv.slice(2);

// 验证参数有效性
if (!subDirName) {
    console.error('Error: 缺少必须的主目录名称参数');
    process.exit(1);
}

// 解析数组参数
let episodeCounts = [];
try {
    episodeCounts = JSON.parse(seasonArrayArg || '[]');
    if (!Array.isArray(episodeCounts) || episodeCounts.some(n => !Number.isInteger(n) || n < 1)) {
        throw new Error('无效的数组格式');
    }
} catch (error) {
    console.error('Error: 第二个参数必须是正整数数组，例如 [12,23,5]');
    process.exit(1);
}

// 获取排序后的源文件列表
const allFiles = fs
    .readdirSync(SOURCE_DIR)
    .filter(file => /^E\d+\..+/.test(file)) // 匹配E开头带数字的文件
    .sort((a, b) => {
        // 提取数字部分进行排序
        const numA = parseInt(a.match(/E(\d+)/)[1]);
        const numB = parseInt(b.match(/E(\d+)/)[1]);
        return numA - numB;
    });

// 检查总集数是否足够
const totalEpisodes = episodeCounts.reduce((sum, n) => sum + n, 0);
if (totalEpisodes > allFiles.length) {
    console.error(`Error: 需要的总集数 ${totalEpisodes} 超过源目录文件数 ${allFiles.length}`);
    process.exit(1);
}

// 创建主目录
const mainDir = path.join(TARGET_PARENT_DIR, subDirName);
try {
    fs.mkdirSync(mainDir, { recursive: true });
    console.log(`主目录已创建/存在: ${subDirName}`);
} catch (error) {
    console.error(`创建主目录失败: ${error.message}`);
    process.exit(1);
}

// 处理每个季的集数
let currentIndex = 0;
episodeCounts.forEach((epCount, seasonIndex) => {
    const seasonNum = (seasonIndex + 1).toString().padStart(2, '0');
    const seasonDir = path.join(mainDir, `Season ${seasonNum}`);

    // 创建季目录
    try {
        fs.mkdirSync(seasonDir, { recursive: true });
    } catch (error) {
        console.error(`创建季目录失败: ${error.message}`);
        process.exit(1);
    }

    // 处理本季文件
    const seasonFiles = allFiles.slice(currentIndex, currentIndex + epCount);
    currentIndex += epCount;

    seasonFiles.forEach((file, fileIndex) => {
        const sourcePath = path.join(SOURCE_DIR, file);
        const originalNumber = file.match(/E(\d+)/)[1];
        const extension = path.extname(file);

        // 生成新文件名（季数大于1时需要重置编号）
        let newNumber;
        if (seasonIndex === 0) {
            newNumber = originalNumber; // 第一季保持原编号
        } else {
            // 保持原始数字位数，例如 005 保持三位数
            const digitCount = originalNumber.length;
            newNumber = (fileIndex + 1).toString().padStart(digitCount, '0');
        }

        const newFileName = `E${newNumber}${extension}`;
        const destPath = path.join(seasonDir, newFileName);

        // 移动并重命名文件
        try {
            fs.renameSync(sourcePath, destPath);
            console.log(`已移动: ${file} → ${path.join(`Season ${seasonNum}`, newFileName)}`);
        } catch (error) {
            console.error(`文件移动失败: ${error.message}`);
            process.exit(1);
        }
    });
});

console.log('操作完成');
